// //
// // Created by dong on 2025/9/24.
// //
//
// #include <iostream>
// #include "demo4.h"
// using namespace std;
//
// void test_one()
// {
//     //c语言强制类型转换
//     int num = (int)1.111;
//
//     //c++强制类型转换
//     int number = int(1.11);
//
//     //static_cast 类似于c语言的强制转换
//     //dynamic_cast
//     //类型转换操作符<要转换的类型>(转换目标)
//
// }
//
// void test_static_cast()
// {
//     //把1.11 转换成int
//     //static_cast 不做去掉const类型(引用类型和指针类型）
//     int num =static_cast<int>(1.11);
//     cout << num  << endl;
// }
//
// void test_const_cast()
// {
//     const int num =123;
//     // int number = num;
//     //int number = static_cast<int>(num);
//
//    //引用中去掉const属性
//     int& number = const_cast<int&>(num);
//
//
//     int data = 12;
//     //const_cast 只能用于指针或者引用类型
//     // const int& value = data;
//      const int& value = const_cast<const int&>(data);
//
//     //reinterpret_cast 只用在hash地址转换
//
// }
//
// void print()
// {
//     cout << __FUNCTION__ << endl;
// }
//
// void test_reinterpret_cast()
// {
//     //int num = print; 错误操作
//
//     long long  num = reinterpret_cast<long long>(print);
//     cout << num << endl;
//
//     using Type =void(*)();
//     auto pFun = reinterpret_cast<Type>(num);
//     pFun();
//
// }
//
// //dynamic_cast 多态的环境下做类型转换
//
//
//
// void test_demo()
// {
//     //起别名
//     typedef int INT;
//     using UINT  = unsigned int;
//
//     //赋值操作 省略赋值语句
// }
//
// void test_for()
// {
//     int array[4]{1,2,3,4};
//
//     for (int v: array)
//     {
//         cout << v << endl;
//     }
//
//     for (int& v:array)
//     {
//         v=v+1;
//     }
//
//     for (int v:array)
//     {
//         cout <<v << endl;
//     }
//
//     for (auto v:array)
//     {
//         cout <<v << endl;
//     }
// }
//
// int Max(int a,int b)
// {
//     return a> b?a:b;
// }
//
// void print(int(*PFUNC)(int,int),int a,int b)
// {
//     cout << PFUNC(a,b) << endl;
// }
//
// //这种只能结合auto来使用
// auto sum(int a,int b)->int
// {
//     return a+b;
// }
//
// //占位符号 c++里面这总没问题
// void print_value(int a,int)
// {
//     cout << a<< endl;
// }
//
// //函数
// void test_Lambada()
// {
//     //Lambada 基本构成
//     //Lambada 不捕获变量 通常可以隐式转换为一个函数指针
//     //[]()能否修改 是否存在异常{}-> 类型()
//     //[]: 捕获方式-使用外面变量的方式 = & this &x,=
//     //()函数参数
//     //{} 函数体
//
//     print(Max,1,2);
//
//     print([](int a,int b){return a> b?a:b;},1,2);
//
//     //返回的是一个被包装的东西 用auto就行了
//     int age = 1;
//     //用值捕获 不能修改 函数调用的结果不会因为变量改变而改变
//     auto p1=[=](){cout << age << endl;};
//     //用引用捕获可以修改 函数调用的结果会因为变量改变而改变
//     auto p2=[&](){cout << age << endl;};
//
//     cout << age << endl;
//
//     p1();
//     p2();
//     age  =1234;
//     p1();
//     p2();
//     //省略写法
//
//     auto p3 =[]{cout << "省略写法"<<endl;};
//
//     p3();
//
//     //lambada 指定返回值 完整版本 mutable可以修改 noexcept没有异常
//     auto p4 = [](int a,int b)mutable noexcept->int{return a>b?a:b;};
//
//     p4(1,2);
//
// }
//
//
//
// int main()
// {
//     // test_reinterpret_cast();
//
//     int num{123};
//     int array[3]{1,2,3};
//
//     // test_for();
//     test_Lambada();
//
//     return 0;
// }